package shujvjiegou.week9;

import java.util.*;

/**
 * @Author JetZhang
 * @Date 2021/11/5
 */
public class HafManTree {
    public static void main(String[] args) {
        List<Treenode> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        int value = sc.nextInt();
        for (int i = 0; i < value; i++) {
            Treenode node = new Treenode(sc.nextInt());
            list.add(node);
        }
        list.sort(new Comparator<Treenode>() {
            @Override
            public int compare(Treenode o1, Treenode o2) {
                if (o1.value >= o2.value) {
                    return 1;
                } else {
                    return -1;
                }
            }
        });
        while (list.size() > 1) {
            Treenode temp = new Treenode(list.get(0).value + list.get(1).value);
            temp.lChild = list.get(0);
            temp.rChild = list.get(1);
            list.remove(0);
            list.remove(0);
            list.add(temp);
            list.sort(new Comparator<Treenode>() {
                @Override
                public int compare(Treenode o1, Treenode o2) {
                    if (o1.value >= o2.value) {
                        return 1;
                    } else {
                        return -1;
                    }
                }
            });
        }
        //链表的第一个节点即为哈夫曼树的根节点
        Treenode t = list.get(0);
        //计算带权路径长度
        int sum = t.hafMan(0, 0);
        System.out.println(sum);
    }

}

class Treenode {
    int value;
    Treenode lChild = null;
    Treenode rChild = null;

    public Treenode(int value) {
        this.value = value;
    }

    //    带权路径长度
    public int hafMan(int level, int sum) {
        if (lChild == null && rChild == null) {
            sum += level * value;
            return sum;
        }
        sum = lChild.hafMan(level + 1, sum);
        sum = rChild.hafMan(level + 1, sum);
        return sum;
    }
}


//    private static int count = 0;
//
//    public static void main(String[] args) {
//        int length = new Scanner(System.in).nextInt();
////        int[] a = new int[length];
//        ArrayList<Integer> list = new ArrayList<>();
//        ArrayList<Integer> list1 = new ArrayList<>();
//        for (int i = 0; i < length; i++) {
////            a[i] = new Scanner(System.in).nextInt();
//            list.add(new Scanner(System.in).nextInt());
//        }
//        list1.addAll(list);
//        while (true) {
//            if (list.size() != 1) {
//                count++;
//                int min = Collections.min(list);
//                for (int i = 0; i < list.size(); i++) {
//                    if (min == list.get(i)) {
//                        list.remove(i);
//                        break;
//                    }
//                }
//                int min1 = Collections.min(list);
//                for (int i = 0; i < list.size(); i++) {
//                    if (min1 == list.get(i)) {
//                        list.remove(i);
//                        break;
//                    }
//                }
//
//                list.add(min1 + min);
//            } else break;
//
//        }
//
//    }
//}
